home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-11-08 | 5.0 KB | 170 lines | [TEXT/MPS ] |
- //========================================================================================
- //
- // File: FWODExce.cpp
- // Release Version: $ 1.0d11 $
- //
- // Copyright: © 1995 by Apple Computer, Inc., all rights reserved.
- //
- //========================================================================================
-
- #include "FWOS.hpp"
-
- #ifndef FWODEXCE_H
- #include "FWODExce.h"
- #endif
-
- #ifndef SOM_Module_OpenDoc_Errors_defined
- #include "ErrorDef.xh"
- #endif
-
- //========================================================================================
- // Runtime Informations
- //========================================================================================
-
- #if FW_LIB_EXPORT_PRAGMAS
- #pragma lib_export on
- #endif
-
- #ifdef FW_BUILD_MAC
- #pragma segment fwodutil
- #endif
-
- //========================================================================================
- // Global functions
- //========================================================================================
-
- //----------------------------------------------------------------------------------------
- // FW_FailODError
- //----------------------------------------------------------------------------------------
-
- FW_FUNC_ATTR void FW_FailODError(Environment* ev)
- {
- if (ev->_major)
- FW_THROW(FW_XOpenDocException(ev));
-
- #if 0
- if (ev->_major)
- {
- const char *excpName = somExceptionId(ev);
- if (strcmp(excpName,ex_ODException) == 0)
- {
- ODException x = *(ODException*)somExceptionValue(ev);
- somExceptionFree(ev);
- ev->_major = NO_EXCEPTION; // $$$$$ Is this done by somExceptionFree?
- THROW(x.error, x.message[0] ?x.message :kODNULL);
- }
- else
- {
- // $$$$$ What is the best thing to do here?
- WARN("Env has non-OpenDoc err: %s",excpName);
- somExceptionFree(ev);
- ev->_major = NO_EXCEPTION; // $$$$$ Is this done by somExceptionFree?
- THROW(-12345,"Unknown SOM exception");
- }
- }
- #endif
- }
-
- //----------------------------------------------------------------------------------------
- // FW_SetException
- //----------------------------------------------------------------------------------------
-
- FW_FUNC_ATTR void FW_SetException(Environment *ev, const FW_XException& exception)
- {
- FW_SetODException(ev, exception.GetPlatformError());
- }
-
- //----------------------------------------------------------------------------------------
- // FW_SetODException
- //----------------------------------------------------------------------------------------
-
- FW_FUNC_ATTR void FW_SetODException(Environment* ev, ODError error)
- {
- if (error)
- {
- ODException *x = (ODException*) SOMMalloc(sizeof(ODException));
- x->error = error;
- x->message[0] = '\0';
- somSetException(ev, USER_EXCEPTION, ex_ODException, x);
- }
- else
- {
- somExceptionFree(ev);
- ev->_major = NO_EXCEPTION;
- }
- }
-
- //----------------------------------------------------------------------------------------
- // FW_GetODException
- //----------------------------------------------------------------------------------------
-
- FW_FUNC_ATTR ODError FW_GetODException(Environment* ev)
- {
- if (ev->_major)
- {
- const char *excpName = somExceptionId(ev);
- if (strcmp(excpName, ex_ODException) == 0)
- {
- ODException *x = (ODException*) somExceptionValue(ev);
- return x->error;
- }
- else
- {
- // Don't know what to do, its a non-OpenDoc error
- FW_DEBUG_MESSAGE("Environment has non-OpenDoc error");
- return kODErrUndefined;
- }
- }
- else
- return kODNoError;
- }
-
- //========================================================================================
- // CLASS FW_XOpenDocException
- //========================================================================================
-
- FW_DEFINE_EXCEPTION(FW_XOpenDocException, FW_XException)
-
- //----------------------------------------------------------------------------------------
- // FW_XOpenDocException::FW_XOpenDocException
- //----------------------------------------------------------------------------------------
-
- FW_XOpenDocException::FW_XOpenDocException(Environment* ev) :
- FW_XException(ev->_major),
- fEv(ev)
- {
- somExceptionFree(ev);
- ev->_major = NO_EXCEPTION; // $$$$$ Is this done by somExceptionFree?
- }
-
- //----------------------------------------------------------------------------------------
- // FW_XOpenDocException::FW_XOpenDocException
- //----------------------------------------------------------------------------------------
-
- FW_XOpenDocException::FW_XOpenDocException(ODError error) :
- FW_XException(error),
- fEv(NULL)
- {
- fEv = somGetGlobalEnvironment();
- // FW_SetODException(fEv, error); // Huh? This looks wrong to me! -JEL
- }
-
- //----------------------------------------------------------------------------------------
- // FW_XOpenDocException::FW_XOpenDocException
- //----------------------------------------------------------------------------------------
-
- ODError FW_XOpenDocException::GetODError() const
- {
- return GetPlatformError();
- }
-
- //----------------------------------------------------------------------------------------
- // FW_XOpenDocException::~FW_XOpenDocException
- //----------------------------------------------------------------------------------------
-
- FW_XOpenDocException::~FW_XOpenDocException()
- {
- }
-
-
-